package com.example.job;

import com.example.service.StudyRoomReservationService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;

/**
 * 座位预约定时任务
 * 
 * @author HP
 * @description 处理座位预约相关的定时任务
 * @createDate 2025-08-26 21:00:00
 */
@Slf4j
@Component
public class SeatReservationScheduledTask {

    @Resource
    private StudyRoomReservationService studyRoomReservationService;

    /**
     * 处理超时预约
     * 每5分钟执行一次，处理已超时的预约记录
     */
    @Scheduled(fixedRate = 5 * 60 * 1000) // 5分钟
    public void processTimeoutReservations() {
        try {
            log.info("开始处理超时预约...");
            
            int processedCount = studyRoomReservationService.processTimeoutReservations();
            
            if (processedCount > 0) {
                log.info("处理超时预约完成，共处理 {} 条记录", processedCount);
            }
        } catch (Exception e) {
            log.error("处理超时预约失败", e);
        }
    }

    /**
     * 座位预约统计
     * 每天凌晨1点执行，用于统计分析
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void generateDailyReservationStatistics() {
        try {
            log.info("开始生成座位预约统计...");
            
            // 可以在这里生成预约统计报告
            // 例如：每日预约数量、签到率、热门座位等
            
            log.info("座位预约统计生成完成");
        } catch (Exception e) {
            log.error("生成座位预约统计失败", e);
        }
    }

    /**
     * 清理过期数据
     * 每月1号凌晨3点执行，清理超过3个月的已完成预约记录
     */
    @Scheduled(cron = "0 0 3 1 * ?")
    public void cleanUpExpiredReservations() {
        try {
            log.info("开始清理过期预约数据...");
            
            // 这里可以实现清理逻辑
            // 例如：删除或归档3个月前的已完成预约记录
            
            log.info("过期预约数据清理完成");
        } catch (Exception e) {
            log.error("清理过期预约数据失败", e);
        }
    }
}